# 形成闭包的条件
# 1. 在函数嵌套的前提下
# 2. 内部函数使用了外部函数的变量或参数
# 3. 外部函数返回了内部函数，可以认为返回的内部函数就是一个闭包（闭包实例）


# 外部函数
def func_out():
    # 外部函数定义了一个变量
    num = 10

    # 内部函数
    def inner(num1):
        result = num + num1
        print(result)

    # 返回的内部函数可以认为就是一个闭包
    return inner


# 调用外部函数，可以获取一个闭包实例
closure = func_out()

# 执行闭包等价于执行inner函数
closure(1)
closure(20)

# 闭包的作用可以保存外部函数的变量或者外部函数的参数
# 外部函数的变量要想释放需要等到闭包释放
